/*
 * @Author: xiaohao
 * @Date: 2025-10-30 17:23:48
 * @LastEditors: xiaohao
 * @LastEditTime: 2025-10-31 08:36:47
 * @FilePath: /lesson24/thread_demo.cc
 * @Description:
 */
#include <iostream>
#include <string>
// C++11 线程库 本质也是对 pthread 的封装
#include <thread>
// Linux封装的线程库 用户不认识轻量级进程，用户只认识线程
#include <pthread.h>
#include <unistd.h>

void hello()
{
    while (true)
    {
        std::cout << "new thread, my pid is " << getpid() << std::endl;
        sleep(1);
    }
}

int main()
{
    std::thread t(hello);

    while (true)
    {
        std::cout << "main thread" << ", my pid is " << getpid() << std::endl;
        sleep(1);
    }
    t.join(); // 等待线程结束
    return 0;
}

// 线程的上下文数据与栈是独立的
// 线程是一个动态的概念，它可以被创建、启动、停止、等待、退出等
// void *threadrun(void *args)
// {
//     std::string name = (const char *)args;
//     while (true)
//     {
//         sleep(1);
//         std::cout << "new thread, my name is " << name << ", my pid is " << getpid() << std::endl;

//         // int a = 10;
//         // a /= 0; // 引发异常，线程退出
//     }
//     return nullptr;
// }

// int main()
// {
//     // Linux 线程控制
//     pthread_t tid;
//     pthread_create(&tid, nullptr, threadrun, (void *)"thread - 1");

//     while (true)
//     {
//         std::cout << "main thread" << ", my pid is " << getpid() << std::endl;
//         sleep(1);
//     }

//     return 0;
// }
